package com.easyCode.sqlMapper.template;

import com.easyCode.util.ModuleUtil;
import com.easyCode.util.StringUtil;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 最终每个文件的输出路径为: projectPath+basePackageModuleName+对应模块名+文件名
 * @author 大忽悠
 * @create 2022/12/2 15:10
 */
@ConfigurationProperties(prefix = "easy-generator.template")
@Data
public class SqlTemplateConfig {
    /**
     * 项目路径
     */
    private String projectPath="";
    /**
     * 基础包模块: 可以不指定
     */
    private String basePackageModuleName="";
    /**
     * entity模块名: 该模块下又分为 dao,dto,vo,factory
     */
    private String entityModuleName="entity";
    /**
     * dao层下存放直接与数据库交互的模型
     */
    private String daoModuleName= ModuleUtil.merge(entityModuleName,"dao");
    /**
     * dto层下存放响应给前端的结果对象
     */
    private String dtoModuleName=ModuleUtil.merge(entityModuleName,"dto");
    /**
     * vo层下存放接收前端请求参数的对象
     */
    private String voModuleName=ModuleUtil.merge(entityModuleName,"vo");
    /**
     * factory层下存放dto,vo,dao三层转换的对象工厂
     */
    private String factoryModuleName=ModuleUtil.merge(entityModuleName,"factory");;
    /**
     * controller模块名
     */
    private String controllerModuleName="controller";
    /**
     * mapper模块名
     */
    private String mapperModuleName="mapper";
    /**
     * service模块名
     */
    private String serviceModuleName="service";
    /**
     * serviceImpl模块名
     */
    private String serviceImplModuleName=ModuleUtil.merge(serviceModuleName,"impl");
    /**
     * 是否启用默认模板配置: 会自动生成默认提供的模板代码
     */
    private Boolean defaultConfig=Boolean.TRUE;
    /**
     * 模板文件的基础目录: 相对于classPath而言
     */
    private String templateBaseDir= "template";

    public static final String DEFAULT_TEMPLATE_BASE_DIR="default-template";

    public String getBasePackageModuleName() {
        return getModulePath(basePackageModuleName);
    }

    public String getEntityModuleName() {
        return getModulePath(entityModuleName);
    }

    public String getDaoModuleName() {
        return getModulePath(daoModuleName);
    }

    public String getDtoModuleName() {
        return getModulePath(dtoModuleName);
    }

    public String getVoModuleName() {
        return getModulePath(voModuleName);
    }

    public String getFactoryModuleName() {
        return getModulePath(factoryModuleName);
    }

    public String getControllerModuleName() {
        return getModulePath(controllerModuleName);
    }

    public String getMapperModuleName() {
        return getModulePath(mapperModuleName);
    }

    public String getServiceModuleName() {
        return getModulePath(serviceModuleName);
    }

    public String getServiceImplModuleName() {
        return getModulePath(serviceImplModuleName);
    }

    private String getModulePath(String moduleName){
         return ModuleUtil.merge(basePackageModuleName,moduleName);
    }

    public String getModuleActualPath(String moduleName) {
        return ModuleUtil.modifyModuleNameToActualPath(projectPath,moduleName);
    }

    public String getTemplateFilePath(String templateFileName){
        return StringUtil.pathMerge(false,templateBaseDir,templateFileName).replaceAll("\\\\","/");
    }

    public String getDefaultTemplateFilePath(String templateFileName){
        return StringUtil.pathMerge(false,DEFAULT_TEMPLATE_BASE_DIR,templateFileName).replaceAll("\\\\","/");
    }
}
